Regig the construction of new domains so that restore and create can share the
authoremellor@ewan <emellor@ewan>
Fri, 7 Oct 2005 12:34:10 +0000 (13:34 +0100)
committeremellor@ewan <emellor@ewan>
Fri, 7 Oct 2005 12:34:10 +0000 (13:34 +0100)
construct method.  This ensures that the domain will have any stale paths in
the store removed on restore.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/python/xen/xend/XendDomainInfo.py

index be6b6fe89c824a14ecc0aae6d26849864a572d05..2b3bf0666700a58310805160076170a69b3d7994 100644 (file)
@@ -153,6 +153,11 @@ def create(config):
     vm = XendDomainInfo(getUuid(), parseConfig(config))
     try:
         vm.construct()
+        vm.initDomain()
+        vm.construct_image()
+        vm.configure()
+        vm.storeVmDetails()
+        vm.storeDomDetails()
         vm.refreshShutdown()
         return vm
     except:
@@ -223,19 +228,14 @@ def restore(config):
     except TypeError, exn:
         raise VmError('Invalid ssidref in config: %s' % exn)
 
-    domid = xc.domain_create(ssidref = ssidref)
-    if domid < 0:
-        raise VmError('Creating domain failed for restore')
-    try:
-        vm = XendDomainInfo(uuid, parseConfig(config), domid)
-    except:
-        xc.domain_destroy(domid)
-        raise
+    vm = XendDomainInfo(uuid, parseConfig(config))
     try:
-        vm.storeVmDetails()
+        vm.construct()
         vm.configure()
         vm.create_channel()
+        vm.storeVmDetails()
         vm.storeDomDetails()
+        vm.refreshShutdown()
         return vm
     except:
         vm.destroy()
@@ -1001,12 +1001,6 @@ class XendDomainInfo:
         # shutdown_start_time from killing the domain, for example.
         self.removeDom()
 
-        self.initDomain()
-        self.construct_image()
-        self.configure()
-        self.storeVmDetails()
-        self.storeDomDetails()
-
 
     def initDomain(self):
         log.debug('XendDomainInfo.initDomain: %s %s %s',
@@ -1100,14 +1094,14 @@ class XendDomainInfo:
     def destroyDomain(self):
         log.debug("XendDomainInfo.destroyDomain(%s)", str(self.domid))
 
-        self.cleanupDomain()
-
         try:
             if self.domid is not None:
                 xc.domain_destroy(dom=self.domid)
         except:
             log.exception("XendDomainInfo.destroy: xc.domain_destroy failed.")
 
+        self.cleanupDomain()
+
 
     ## private: